package emoji

import (
	"fmt"
	"github.com/Andrew-M-C/go.emoji"
	"regexp"
	"strconv"
	"strings"
	"unicode/utf16"
)

//#    ☀☁☔⛄⚡🌀🌁🌂🌃🌄🌅🌆🌇🌈❄⛅🌉🌊🌋🌌🌏🌑🌔🌓🌙🌕🌛🌟🌠
//    #✅📄
//    #🕐🕑🕒🕓🕔🕕🕖🕗🕙🕘⌚⌛⏰⏳
//    #
//    #♈♉♊♋♌♍♎♏♐♑♒♓⛎
//    #
//    #🍀🌷🌱🍁🌸🌹🍂🍃🌺🌻🌴🌵🌽🍄🌰🌼🌿🍒🍌🍎🍊🍓🍉🍅🍆🍈🍍🍇🍑🍏
//    #
//    #👂👄👅💄💅💆💇💈👤👦👧👨👩👽👾👿💀🙅🙆🙇🙈🙊🙉🙋🙌🙍🙎🙏
//    #
//    #💁💂💃🐌🐍🐎🐔🐗🐫🐘🐨🐒🐑🐙🐚🐛🐜🐝🐞🐠🐡🐢🐤🐥🐦🐣🐧🐟🐬🐭🐯🐱🐳🐴🐵🐶🐷🐻🐽😺😸😹😽😻😿😾😼🙀
//    #
//    #😠😩😲😞😵😰😒😍😤😜😝😋😘😚😷😳😅😆☺😄😢😭😨😣😡😌😖😔😱😓😥😫😉
//    #
//    #🏠🏡🏢🏣🏥🏦🏧🏨🏩🗾🗿👞👟👠👡👢👕👑©®™ℹ🔟📶
//    #
//    #🍔🍙🍰🍜🍞🍳🍦🍟🍱🍲🍧🍖🍥🍠🍗🍕🍨🍩🍪🍫🍬🍭🍮🍯🍤🍴☕🍸🍺🍵🍶🍷🍻🍹🍕
//    #
//    #⭕❌❎❗⁉‼❓❔❕〰➰❤💓💔💕💖💗✔🈲🆚🆔🆒🈳🈴🈵㊙🉐🉑➕➖✖➗👌👊👍👋👏㊗🉐
//#    👉👈

//表情解码
func UnicodeEmojiDecode(s string) string {
	//emoji表情的数据表达式
	re := regexp.MustCompile("\\[[\\\\u0-9a-zA-Z]+\\]")
	//提取emoji数据表达式
	reg := regexp.MustCompile("\\[\\\\u|]")
	src := re.FindAllString(s, -1)
	for i := 0; i < len(src); i++ {
		e := reg.ReplaceAllString(src[i], "")
		p, err := strconv.ParseInt(e, 16, 32)
		if err == nil {
			s = strings.Replace(s, src[i], string(rune(p)), -1)
		}
	}
	return s
}

// EmojiDecode Emoji表情解码
func EmojiDecode(s string) string {
	re := regexp.MustCompile("\\\\u[ed][0-9a-f]{3}\\\\u[ed][0-9a-f]{3}")
	result := re.FindAllString(s, -1)
	if len(result) > 0 {
		for k := range result {
			tmp := result[k]
			result[k] = strings.Replace(result[k], "\\u", "0x", -1)
			cov1, _ := strconv.ParseUint(result[k][:6], 0, 32)
			cov2, _ := strconv.ParseUint(result[k][6:], 0, 32)
			covResult := fmt.Sprintf("%c", utf16.DecodeRune(rune(cov1), rune(cov2)))
			s = strings.Replace(s, tmp, covResult, -1)
		}
	}
	return s
}

//分解
func EmojiGet分解(s string)[]string  {
	var data []string
	_= emoji.ReplaceAllEmojiFunc(s, func(emoji string) string {
		data= append(data, emoji)
		return ""
	})
	return data
}